package com.hjqjl.whdemo.feature.feature0.ui.activity;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;

import com.github.mikephil.charting.charts.Chart;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.formatter.IndexAxisValueFormatter;
import com.github.mikephil.charting.formatter.ValueFormatter;
import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
import com.hjqjl.whdemo.base.BaseActivity;
import com.hjqjl.whdemo.databinding.ActivityLineChartBinding;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class LineChartActivity extends BaseActivity {
    public static void start(Context context) {
        Intent starter = new Intent(context, LineChartActivity.class);
        context.startActivity(starter);
    }

    private ActivityLineChartBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityLineChartBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());


        // *************************数据转换start********************* //
//        WeatherModel weatherModel = WeatherModel.parse();
//        List<WeatherModel.WeatherListModel> weatherModels = weatherModel.getWeatherList();
        List<Float> datas = new ArrayList<>();
        List<Float> datas2 = new ArrayList<>();
//        String date = TimeUtils.getNowString(TimeUtils.getSafeDateFormat("yyyy-MM-dd"));
//        for (int i = 0; i < weatherModels.size(); i++) {
//            try {
//                if (date.equals(weatherModels.get(i).getDate())) {
//                    String waveHeight = weatherModels.get(i).getWaveHeight().substring(0, weatherModels.get(i).getWaveHeight().indexOf("米"));
//                    datas.add(Float.parseFloat(waveHeight));
//                }
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }
//
//        for (int i = 0; i < weatherModels.size(); i++) {
//            try {
//                if (date.equals(weatherModels.get(i).getDate())) {
//                    String waveSpeed = weatherModels.get(i).getWaveSpeed().substring(0, weatherModels.get(i).getWaveSpeed().indexOf(" 米/秒"));
//                    datas2.add(Float.parseFloat(waveSpeed));
//                }
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }
        Random r = new Random();
        for (int i = 0; i < 25; i++) {
            datas.add((float) r.nextInt(10));
            datas2.add((float) r.nextInt(10));
        }

        //在MPAndroidChart一般都是通过List<Entry>对象来装数据的
        final List<Entry> entries = new ArrayList<>();
        final List<Entry> entries2 = new ArrayList<>();
        //循环取出数据
        for (int i = 0; i < datas.size(); i++) {
            entries.add(new Entry(i, datas.get(i)));
        }
        //循环取出数据
        for (int i = 0; i < datas2.size(); i++) {
            entries2.add(new Entry(i, datas2.get(i)));
        }
        //一个LineDataSet对象就是一条曲线
        LineDataSet lineDataSet = new LineDataSet(entries, "潮水高度");
        LineDataSet lineDataSet2 = new LineDataSet(entries2, "流水速度");
        lineDataSet.setDrawCircles(false);//折线图上的圈不画了
        lineDataSet2.setDrawCircles(false);
        lineDataSet.setDrawValues(false);
        lineDataSet2.setDrawValues(false);
        lineDataSet.setColor(Color.WHITE);//设置曲线的颜色
        lineDataSet2.setColor(0xFF00A4FF);//设置曲线的颜色
        //保存LineDataSet集合
        ArrayList<ILineDataSet> dataSets = new ArrayList<>();
        dataSets.add(lineDataSet); // add the datasets
        dataSets.add(lineDataSet2);

        LineData lineData = new LineData(dataSets);//多条曲线
        binding.lineChart.setData(lineData);
        // *************************数据转换end********************* //

        // **************************图表本身一般样式start**************************** //
        binding.lineChart.setNoDataText("数据接入中");   // 没有数据时样式
        binding.lineChart.getPaint(Chart.PAINT_INFO).setTextSize(48);//暂无数据的字体大小
//        binding.lineChart.setMaxVisibleValueCount(0);  // 数据点上显示的标签，最大数量，默认100。且dataSet.setDrawValues(true);必须为true。只有当数据数量小于该值才会绘制标签
        // **************************图表本身一般样式end**************************** //
        binding.lineChart.setTouchEnabled(false);// 所有触摸事件,默认true

        //得到X轴
        XAxis xAxis = binding.lineChart.getXAxis();
        //设置X轴的位置（默认在上方)
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        xAxis.setDrawGridLines(false);   // 是否绘制网格线，默认true
        final String[] weeks = {"00:00", "01:00", "02:00", "03:00", "04:00", "05:00", "06:00", "07:00", "08:00", "09:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00", "17:00", "18:00", "19:00", "20:00", "21:00", "22:00", "23:00", "24:00"};
        xAxis.setLabelCount(weeks.length);//设置数量
        xAxis.setTextColor(Color.WHITE);//自定义样式
        xAxis.setValueFormatter(new IndexAxisValueFormatter(weeks));
        xAxis.setGranularity(2); // 设置X轴值之间最小距离。正常放大到一定地步，标签变为小数值，到一定地步，相邻标签都是一样的。这里是指定相邻标签间最小差，防止重复。
        xAxis.setTextSize(24);
        xAxis.setLabelCount(13);
        binding.lineChart.setExtraBottomOffset(10f);//解决底部字体显示不全

        //得到Y轴
        YAxis leftYAxis = binding.lineChart.getAxisLeft();
        leftYAxis.setGranularity(2);
        leftYAxis.setLabelCount(datas.size());
        leftYAxis.setTextColor(Color.WHITE);//自定义样式
        leftYAxis.setValueFormatter(new ValueFormatter() {
            @Override
            public String getFormattedValue(float value) {
                int IValue = (int) value;
                return String.valueOf(IValue);

            }
        });
        leftYAxis.setTextSize(24);
        leftYAxis.setXOffset(10);//设置的距离
        leftYAxis.enableGridDashedLine(5f, 10f, 20f);// 网格线为虚线，lineLength，每段实线长度,spaceLength,虚线间隔长度，phase，起始点（进过测试，最后这个参数也没看出来干啥的）
//        //+2：最大值n就有n+1个刻度，在加上y轴多一个单位长度，为了好看，so+2
//        leftYAxis.setLabelCount(6, false);
        //设置从Y轴值
        leftYAxis.setAxisMinimum(0f);
//        //+1:y轴多一个单位长度，为了好看
//        leftYAxis.setAxisMaximum(Collections.max(datas) + 1);


        YAxis rightYAxis = binding.lineChart.getAxisRight();
        rightYAxis.setGranularity(2);
        rightYAxis.setLabelCount(datas2.size());
        rightYAxis.setTextColor(Color.WHITE);//自定义样式
        rightYAxis.setValueFormatter(new ValueFormatter() {
            @Override
            public String getFormattedValue(float value) {
                int IValue = (int) value;
                return String.valueOf(IValue);
            }
        });
        rightYAxis.setTextSize(24);
        rightYAxis.setTextColor(0xFF00A4FF);
        rightYAxis.setXOffset(10);//设置的距离
        rightYAxis.enableGridDashedLine(5f, 10f, 20f);
//        //+2：最大值n就有n+1个刻度，在加上y轴多一个单位长度，为了好看，so+2
//        rightYAxis.setLabelCount(6, false);
        //设置从Y轴值
        rightYAxis.setAxisMinimum(0f);
        //+1:y轴多一个单位长度，为了好看
//        rightYAxis.setAxisMaximum(Collections.max(datas2) + 1);

        //得到Legend对象
        Legend legend = binding.lineChart.getLegend();
        legend.setDrawInside(false);//不绘制在图形内部
        legend.setTextSize(20);//设置文字大小
//        legend.setTypeface(Typeface.DEFAULT_BOLD);//文字加粗
        legend.setFormSize(10);//设置图例的大小
        legend.setTextColor(Color.WHITE);//设置文字颜色
//        legend.setFormToTextSpace(20f);//设置图例距离文字的距离
//        legend.setForm(Legend.LegendForm.LINE);//设置图例类型为线条
        //设置图例下、中对齐
        legend.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
        legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER);
    }
}